/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package CONTABILIDAD_CONTROLADOR;

import CONTABILIDAD_MODELO.CON_AJUSTE_REDONDEO;
import CONTABILIDAD_MODELO.CON_CHEQUE;
import Conexion.Conexion;
import RRHH_Modelo.RHH_USUARIO;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author equipo_4
 */
@WebServlet(name = "CON_VISTA_LIBRO_DIARIO_CONTROLLER", urlPatterns = {"/CON_VISTA_LIBRO_DIARIO_CONTROLLER"})
public class CON_VISTA_LIBRO_DIARIO_CONTROLLER extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
           
            
        } finally {            
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            
            String data="";
            RHH_USUARIO usuario = ((RHH_USUARIO)request.getSession().getAttribute("usr"));
            Conexion con = new Conexion(usuario.getUSUARIO(), usuario.getPASSWORD());
            
            String evento = request.getParameter("evento");
            
            switch(evento)
            {
                case "estado":
                    estado(request, response, con);
                    break;
                case"buscarnombre":
                    data=buscarnombre(request, response, con);
                    break;
                case"sincc":
                    data=concc(request, response, con);
                    break;
            }
            
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/plain");
            response.getWriter().write(data);
            con.Close();
            
        } catch (SQLException ex) {
            Logger.getLogger(CON_VISTA_LIBRO_DIARIO_CONTROLLER.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }
    
    public void estado(HttpServletRequest request, HttpServletResponse response, Conexion con) throws SQLException
    {
            Double id = Double.parseDouble(request.getParameter("id"));
            Double estado = Double.parseDouble(request.getParameter("estado"));
            
            CON_CHEQUE cheque = new CON_CHEQUE();
            cheque.setCon(con);
            if(estado==0)
                cheque.activar(id);
            else
                cheque.anular(id);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    private String buscarnombre(HttpServletRequest request, HttpServletResponse response, Conexion con) throws SQLException {
        String codigo = request.getParameter("codigo");
        String fecha = request.getParameter("fecha");
        String tc = request.getParameter("tc");
        String codcuenta = request.getParameter("codcuenta");
        String desccuenta = request.getParameter("desccuenta");
        String condcentro = request.getParameter("condcentro");
        String desccentro = request.getParameter("desccentro");
        String glosa = request.getParameter("glosa");
        String cheque = request.getParameter("cheque");
        String tipo = request.getParameter("tipoc");
        String debe = request.getParameter("debe");
        String haber = request.getParameter("haber");
        String debetc = request.getParameter("debetc");
        String habertc = request.getParameter("habertc");
        String cambio[]=tc.split("\\.");
        if(cambio.length>1){
           tc=cambio[0]+","+cambio[1];
            if(cambio[1].equals("0") ||cambio[1].equals("00")){
                tc=cambio[0];
            } 
        }
        String consulta = " select CODIGO_COMPROBANTE,TIPO,FECHA, TIPO_CAMBIO, \n" +
                            "CODIGO_CUENTA, DESCRIPCION_CUENTA, CODIGO_CENTRO_COSTO,\n" +
                            "DESCRIPCION_CENTRO_COSTO, GLOSA, CHEQUE, \n" +
                            "sum(DEBE_BASE) AS DEBE_BASE, sum(HABER_BASE) AS HABER_BASE , \n" +
                            "sum(DEBE) AS DEBE, sum(HABER) AS HABER \n" +
                            "from BROKER.CON_VISTA_LIBRO_DIARIO \n" +
                            "where CODIGO_COMPROBANTE like('"+codigo+"%')\n" +
                            "and TO_CHAR(TO_NUMBER(TIPO_CAMBIO)) like('"+tc+"%')\n" +
                            "and CODIGO_CUENTA like('"+codcuenta+"%')\n" +
                            "and TIPO like('"+tipo+"%')\n" +
                            "and UPPER(DESCRIPCION_CUENTA) like(UPPER('"+desccuenta+"%'))\n" +
                            "and ((CODIGO_CENTRO_COSTO like('"+condcentro+"%')) or (CODIGO_CENTRO_COSTO IS NULL))\n" +
                            "and ((UPPER(DESCRIPCION_CENTRO_COSTO) like(UPPER('"+desccentro+"%'))) OR(DESCRIPCION_CENTRO_COSTO IS NULL))\n" +
                            "and UPPER(GLOSA) like(UPPER('"+glosa+"%'))";
                           
        if(fecha.length()!=0){
            consulta+="and to_date(FECHA,'DD/MM/YYYY') like to_date(('"+fecha+"'),'DD/MM/YYYY')";
        }
        if(cheque.length()!=0){
            consulta+= " and CHEQUE ="+cheque;
        }
        if(debe.length()!=0){
            consulta+= " and DEBE ="+debe;
        }
        if(haber.length()!=0){
            consulta+= " and HABER ="+haber;
        }
        if(debetc.length()!=0){
            consulta+= " and DEBE_BASE ="+debetc;
        }
        if(habertc.length()!=0){
            consulta+= " and HABER_BASE ="+habertc;
        }
        consulta+=" group by CODIGO_COMPROBANTE,TIPO, FECHA,TIPO_CAMBIO, CODIGO_CUENTA, DESCRIPCION_CUENTA,CODIGO_CENTRO_COSTO, DESCRIPCION_CENTRO_COSTO, GLOSA, CHEQUE";
         double total_debe=0; 
        double total_haber=0;        
        String data="";
        ResultSet rs = con.EjecutarConsulta(consulta);
        data+="<thead style='background: blue; color: white;'>";
        data+="<th>COMPROBANTE</th>";
        data+="<th>TIPO</th>";
        data+="<th>FECHA</th>";
        data+="<th>TC</th>";
        data+="<th>COD CUENTA</th>";
        data+="<th>DESC CUENTA</th>";
        data+="<th class='cc'>COD CENTRO</th>";
        data+="<th class='cc'>DESC CENTRO</th>";
        data+="<th>GLOSA</th>";
        data+="<th>CHEQUE</th>";
        data+="<th>DEBE</th>";
        data+="<th>HABER</th>";
        data+="<th>DEBE TC</th>";
        data+="<th>HABER TC</th>";
        data+="</thead>";
        data+="<tbody style='font-size: 15px; font-weight: bolder;'>";
        while(rs.next())
        {
            String asd=rs.getDouble("TIPO_CAMBIO")+"";
            String cambio2[]=asd.split("\\.");
            String resul=cambio2[0]+"."+cambio2[1];
            if(cambio2[1].length()>2){
                resul=cambio2[0]+"."+cambio2[1].substring(0,2);
            }
            
            data +="<tr>";
                    data +="<td>"+rs.getString("CODIGO_COMPROBANTE")+"</td>";
                    data +="<td>"+rs.getString("TIPO")+"</td>";
                    data +="<td>"+rs.getDate("FECHA")+"</td>";
                    data +="<td>"+resul+"</td>";
                    data +="<td>"+rs.getString("CODIGO_CUENTA")+"</td>";
                    data +="<td>"+rs.getString("DESCRIPCION_CUENTA")+"</td>"; 
                    String cod_cen = rs.getString("CODIGO_CENTRO_COSTO");
                    data +="<td class='cc'>"+cod_cen+"</td>";
                    String desc_cen = rs.getString("DESCRIPCION_CENTRO_COSTO");
                        data +="<td class='cc'>"+desc_cen+"</td>";
                    data +="<td>"+rs.getString("GLOSA")+"</td>";
                    
                    data +="<td>"+rs.getDouble("CHEQUE")+"</td>";
                    Double ddd= CON_AJUSTE_REDONDEO.truncarDecimal(rs.getDouble("DEBE_BASE"));
                    Double hhh= CON_AJUSTE_REDONDEO.truncarDecimal(rs.getDouble("HABER_BASE"));
                    total_debe+=ddd;
                    total_haber+=hhh;
                    String debe2=rs.getString("DEBE");
                    debe2=(debe2==null || debe2.length()==0)?"0.0":debe2;
                    String haber2=rs.getString("HABER");
                    haber2=(haber2==null || haber2.length()==0)?"0.0":haber2;
                    data +="<td>"+debe2+"</td>";
                    data +="<td>"+haber2+"</td>";
                    data +="<td>"+ddd+"</td>";
                    data +="<td>"+hhh+"</td>";                                                                  
                }
                    data +="<tr>";
                    data +="<td colspan='12'>TOTAL</td>";
                    data +="<td >"+CON_AJUSTE_REDONDEO.truncarDecimal(total_debe)+"</td>";
                    data +="<td >"+CON_AJUSTE_REDONDEO.truncarDecimal(total_haber)+"</td>";
                    data +="</tr>";
                    data+="</tbody>";
        return data;
    }   
     private String concc(HttpServletRequest request, HttpServletResponse response, Conexion con) throws SQLException {
        
        String data ="";
        
        String tipo = request.getParameter("tipo");
        String consulta="";
        if(tipo.equals("1"))
        {
            String mes = request.getParameter("mes");
            String ano = request.getParameter("ano");
            consulta = "select vld.CODIGO_COMPROBANTE, vld.FECHA, vld.TIPO, vld.TIPO_CAMBIO, vld.CODIGO_CUENTA, vld.DESCRIPCION_CUENTA, vld.CODIGO_CENTRO_COSTO, vld.DESCRIPCION_CENTRO_COSTO, vld.GLOSA, vld.CHEQUE, trunc(sum(vld.DEBE_BASE),2) AS DEBE_BASE, trunc(sum(vld.HABER_BASE),2) AS HABER_BASE , trunc(sum(vld.DEBE),2) AS DEBE, trunc(sum(vld.HABER),2) AS HABER from BROKER.CON_VISTA_LIBRO_DIARIO vld where CODIGO_COMPROBANTE like ('%-"+mes+"-"+ano+"') group by (vld.CODIGO_COMPROBANTE, vld.FECHA, vld.TIPO_CAMBIO, vld.CODIGO_CUENTA,vld.TIPO, vld.DESCRIPCION_CUENTA, vld.CODIGO_CENTRO_COSTO, vld.DESCRIPCION_CENTRO_COSTO, vld.GLOSA, vld.CHEQUE)  order by TIPO,CODIGO_COMPROBANTE";

        }
         else
        {
            String de = request.getParameter("de");
            String hasta = request.getParameter("hasta");
            consulta = "select vld.CODIGO_COMPROBANTE, vld.TIPO, vld.FECHA, vld.TIPO_CAMBIO, vld.CODIGO_CUENTA, vld.DESCRIPCION_CUENTA, vld.CODIGO_CENTRO_COSTO, vld.DESCRIPCION_CENTRO_COSTO, vld.GLOSA, vld.CHEQUE, trunc(sum(vld.DEBE_BASE),2) AS DEBE_BASE, trunc(sum(vld.HABER_BASE),2) AS HABER_BASE, trunc(sum(vld.DEBE),2) AS DEBE, trunc(sum(vld.HABER),2) AS HABER  from BROKER.CON_VISTA_LIBRO_DIARIO vld where FECHA between to_date('"+de+"','dd/mm/yyyy') and to_date('"+hasta+"','dd/mm/yyyy') group by (vld.CODIGO_COMPROBANTE, vld.FECHA,vld.TIPO, vld.TIPO_CAMBIO, vld.CODIGO_CUENTA, vld.DESCRIPCION_CUENTA, vld.CODIGO_CENTRO_COSTO, vld.DESCRIPCION_CENTRO_COSTO, vld.GLOSA, vld.CHEQUE)  order by TIPO,CODIGO_COMPROBANTE";
        }
        
        double total_debe=0; 
        double total_haber=0; 
        ResultSet rs = con.EjecutarConsulta(consulta);
        
        data+="<thead style='background: blue; color: white;'>";
        data+="<th>COMPROBANTE</th>";
        data+="<th>TIPO</th>";
        data+="<th>FECHA</th>";
        data+="<th>TC</th>";
        data+="<th>COD CUENTA</th>";
        data+="<th>DESC CUENTA</th>";
        data+="<th class='cc'>COD CENTRO</th>";
        data+="<th class='cc'>DESC CENTRO</th>";
        data+="<th>GLOSA</th>";
        data+="<th>CHEQUE</th>";
        data+="<th>DEBE</th>";
        data+="<th>HABER</th>";
        data+="<th>DEBE TC</th>";
        data+="<th>HABER TC</th>";
        data+="</thead>";
        data+="<tbody style='font-size: 15px; font-weight: bolder;'>";
        while(rs.next())
        {
            String asd=rs.getDouble("TIPO_CAMBIO")+"";
            String cambio[]=asd.split("\\.");
            String resul=cambio[0]+"."+cambio[1];
            if(cambio[1].length()>2){
                resul=cambio[0]+"."+cambio[1].substring(0,2);
            }
            
            data +="<tr>";
                    data +="<td>"+rs.getString("CODIGO_COMPROBANTE")+"</td>";
                    data +="<td>"+rs.getString("TIPO")+"</td>";
                    data +="<td>"+rs.getDate("FECHA")+"</td>";
                    data +="<td>"+resul+"</td>";
                    data +="<td>"+rs.getString("CODIGO_CUENTA")+"</td>";
                    data +="<td>"+rs.getString("DESCRIPCION_CUENTA")+"</td>"; 
                    String cod_cen = rs.getString("CODIGO_CENTRO_COSTO");
                    if(cod_cen!=null)
                        data +="<td class='cc'>"+cod_cen+"</td>";
                    else
                        data +="<td class='cc'></td>";
                     String desc_cen = rs.getString("DESCRIPCION_CENTRO_COSTO");
                    if(desc_cen!=null)
                        data +="<td class='cc'>"+desc_cen+"</td>";
                    else
                        data +="<td class='cc'></td>";
                    
                    data +="<td>"+rs.getString("GLOSA")+"</td>";
                    
                    data +="<td>"+rs.getDouble("CHEQUE")+"</td>";
                    Double ddd= CON_AJUSTE_REDONDEO.truncarDecimal(rs.getDouble("DEBE_BASE"));
                    Double hhh= CON_AJUSTE_REDONDEO.truncarDecimal(rs.getDouble("HABER_BASE"));
                    total_debe+=ddd;
                    total_haber+=hhh;
                    data +="<td>"+CON_AJUSTE_REDONDEO.truncarDecimal(rs.getDouble("DEBE"))+"</td>";
                    data +="<td>"+CON_AJUSTE_REDONDEO.truncarDecimal(rs.getDouble("HABER"))+"</td>";
                    data +="<td>"+ddd+"</td>";
                    data +="<td>"+hhh+"</td>";                                                                  
                }
                    data +="<tr>";
                    data +="<td colspan='12'>TOTAL</td>";
                    data +="<td >"+CON_AJUSTE_REDONDEO.truncarDecimal(total_debe)+"</td>";
                    data +="<td >"+CON_AJUSTE_REDONDEO.truncarDecimal(total_haber)+"</td>";
                    data +="</tr>";
                    data+="</tbody>";
        return data;
    }   
   
}
